/**
 * @fileoverview   dom/base dom基础模块，定义dom，一些所有dom模块会用的方法等

 * @date: 11-11-4
 * @time: 上午10:33
 * @author 2kid
 * @version 0.1
 */
/**
 *
 *
 * dom构造函数
 * 属性：
 * dom.NodeType
 * 方法：
 * dom.isdom
 * dom.iswin
 * .get
 * .set
 *
 */
F.reg('dom/base', function (f) {
    var win = window, doc = win['document'], docElement = doc.documentElement;
    var dom = Dom;
    /**
     * @function
     * @constructor
     * @param elem
     */
    /**
     * @name F.Dom
     * @object
     * @namespace Dom模块。dom操作、包括元素的查询、遍历，样式，属性等的操作、 <br>
     * 一切操作通过dom.query('')。返回的是F.Dom对象，以便链式操作。 <br>
     * 注：以后说的Dom对象就是指的这个对象  <br>
     */
    function Dom(elem) {
        if (this instanceof Dom) {
            var _elem = [];
            if (f.type(elem, 'array')) {
                _elem = elem;
            }

            //添加数组访问形式
            //for ie6,7
            this.length = 0;
            Array.prototype.push.apply(this, _elem);
            /**
             * @name F.Dom.prototype.get
             * @function
             * @namespace 返回获取的原生的元素|数组
             * @param {Number} i 可选，从0开始，返回索引的元素，否则返回元素数组
             * @return {Array | Element}
             * @example
             * 例子：
             * 1.
             * //得到所有a元素的数组
             * var a=dom.query('a').get();
             * 2.
             * //得到第一个a元素
             * var a=dom.query('a').get(0);
             * alert(a.href);
             * 3.
             * //也可以直接通过数组索引访问
             * dom.query('a')[0]
             */
            this.get = function (i) {
                if (i >= 0) {
                    return _elem[i];
                }

                return _elem;
            };
            /**
             * @name F.Dom.prototype.set
             * @function
             * @namespace 设置元素数组
             * @param {Array} elem 当前对象的元素
             * @example
             * 例子：
             * 1.
             * //通常用于插件
             *
             */

            this.set = function (elem) {
                _elem = elem;
            };
        } else {
            return new Dom(elem);
        }
    }

    f.extend(dom, {
        /**
         * @name F.Dom.isdom
         * @function
         * @namespace 判断是否为dom对象
         * @return {Boolean}
         */
        isdom:function (o) {
            return o instanceof dom;
        },
        /**
         * @name F.Dom.iswin
         * @function
         * @namespace 判断是否为window
         * @return {Boolean}
         */
        iswin:function (o) {
            return o === win;
        },
        /**
         * @name F.Dom.NodeType
         * @object
         * @namespace  NodeType常量，
         * {ELEMENT_NODE:1,ATTRIBUTE_NODE:2    ,TEXT_NODE:3    ,COMMENT_NODE:8    ,DOCUMENT_NODE:9 ,DOCUMENT_FRAGMENT:11}
         * @return {Boolean}
         */
        NodeType:{ELEMENT_NODE:1, ATTRIBUTE_NODE:2, TEXT_NODE:3, COMMENT_NODE:8, DOCUMENT_NODE:9, DOCUMENT_FRAGMENT:11}
    }, true);


    return Dom;

});